/* 

auth：王宇嘉
date：2022-8-15
desc：app下使用sqlite持久保存数据。注意，只能在APP上使用。

 */

class HandleSQLiteBase {

	constructor(func, DBname = 'main', table_name = 'table1') {
		this.DBname = DBname // 库的名字
		this.table_name = table_name // 要查询的表名
		this.func = func(this.DBname, this.table_name) // 操作数据库的函数
		this.list = [] // 用于接收查询结果
		this.loading = false // 是否是加载中。
		this.state = true // 请求结果状态。成功true，失败false
		this.create_table_statements = `"id" Integer primary key,"test" STRING(10) not null` // 创建表定义字段部分的语句。
	}

	// 打开数据库
	open() {
		this.loading = true
		plus.sqlite.openDatabase({
			name: this.DBname, //这里是数据库的名称
			path: '_doc/db.sqlite3', //_doc是相对路径的应用私有文档目录
			success: function(e) {
				console.log('数据库打开成功')
			},
			fail: function(e) {
				console.log('数据库打开失败:', e)
			}
		});
	}

	// 关闭数据库
	close() {
		plus.sqlite.closeDatabase({
			name: this.DBname,
			success: function(e) {
				console.log('数据库关闭成功')
			},
			fail: function(e) {
				console.log('数据库关闭失败')
			}
		})
		this.loading = false
	}

	// 判断数据库是否打开
	isOpen() {
		var bool = plus.sqlite.isOpenDatabase({
			name: 'test',
			path: '_doc/aaa.db'
		});
		console.log('数据库是否打开：' + bool)
	}

	// 创建表格
 	static createTable() {
		plus.sqlite.executeSql({
			name: this.DBname,
			sql: `create table if not exists ${this.table_name} (${this.create_table_statements})`, // 需要的创建的字段要在这里定义。
			success: function(e) {
				console.log(`${this.table_name} create success!`);
				this.state = true
			},
			fail: function(e) {
				console.log(`${this.table_name} create failed: ` + JSON.stringify(e));
				this.state = false
			}
		});
	}

	// 删除表格
	static deleteTable() {
		plus.sqlite.executeSql({
			name: this.DBname,
			sql: `drop table ${this.table_name}`,
			success: function(e) {
				console.log(`drop ${this.table_name} success`)
				this.state = true
			},
			fail: function(e) {
				console.log(`drop ${this.table_name} fail`)
				this.state = false
			}
		})
	}

	// 获取列表
	getList(params) {
		this.open()
		this.func.getList(params).then((res) => {
			this.list = res
			this.state = true
		}).catch(err=>{
			this.state = false
		})
		this.close()
	}
	
	// 通用执行语句
	execute(method,params) {
		this.open()
		this.func[method](params).then(res=>{
			this.list = res
			this.state = true
		}).catch(err=>{
			this.state = false
		})
		this.close()
	}
}

class HandleSQLite extends HandleSQLiteBase{
	constructor(func, DBname = 'main', table_name = 'table1') {
		super(func, DBname, table_name)
		this.create_table_statements = `"id" Integer primary key,"test" STRING(10) not null` // 创建表定义字段部分的语句。
	}
	
}

export {
	HandleSQLite
}
